草庐IT

c++ - QMap 和 std::unique_ptr

全部标签

c++ - std::cin >> std::string 是如何实现的?

特别是,代码如何检查字符的内存是否应该重新分配?或者用户输入了多少个字符?如果我想将C字符串的值分配给我的字符串类的实现,我可能会做这样的事情String&operator=(String&to,constchar*from){if((strlen(from)+1)>to.size){if(to.str!=NULL){delete[]to.str;to.str=NULL;}to.size=strlen(from)+1;to.str=newchar[to.size];}strcpy(to.str,from);returnto;}很简单。但是std::string的operator>>真的

c++ - C语言在不同架构上的文件操作

作为一个研究项目,我们正在标准C(BINARY)文件处理库(stdio)之上编写一个抽象层,通过提供一些用于事务处理文件的额外功能。工作流程如下:用户使用我们的API(或标准fopen)打开一个文件。都返回FILE*.文件以二进制模式打开!用户使用标准库命令(例如fwrite)将数据写入文件用户使用我们的API在打开的文件上打开一个交易:TRANSACTIONa=trans_start(FILE*)用户为TRANSACTION设置数据验证器对象(set_validator(TRANSACTION,int(*)(char*))用户使用我们自己的API(inttrans_write_str

STD :: MAP默认构造函数是否明确?

以下代码在G++(各种版本)上填充了罚款,但在Clang++-3.4上失败了我的系统上的libc++:#include#includestd::mapf(){return{};}intmain(){autom=f();}clang标记以下问题:x.cpp:6:12:error:chosenconstructorisexplicitincopy-initializationreturn{};^~/usr/local/Cellar/llvm34/3.4.2/lib/llvm-3.4/bin/../include/c++/v1/map:838:14:note:constructordeclaredh

c++ - 嵌套并行级别的 omp critical 行为

考虑以下场景:函数A创建一层OMP并行区域,每个OMP线程调用函数B,函数B本身包含另一层OMP并行区域。然后,如果在函数B的并行区域内,存在一个OMP临界区域,那么,该区域对于函数A和B创建的所有线程来说是“全局”临界的,还是仅对函数B是局部的?如果B是预构建函数(例如静态或动态链接库)怎么办? 最佳答案 OpenMP中的关键区域具有全局绑定(bind),它们的范围扩展到所有出现的具有相同名称的关键构造(在这方面,所有未命名的构造共享相同的特殊内部名称),无论它们出现在代码中的何处。您可以在OpenMPspecification的

c++ - 从零开始的 Lua/C++ 绑定(bind)

我是Lua的新手,正在尝试了解一些基础知识。我想了解的是将Lua绑定(bind)到C++实例。我对第三方库不感兴趣,我想在更基础的层面上理解这一点-谢谢:)这是我的问题:根据我所阅读的内容,我的假设是Lua只能绑定(bind)到静态C函数。这是正确的吗?这是否意味着要绑定(bind)C++类的实例,我首先需要为我想要的每个方法和属性getter/setter编写静态函数,并接受实例指针作为参数。我会在Lua中注册这些函数。我会向Lua传递一个指向C++类实例的指针。我会从Lua调用其中一个注册函数,传递C++实例指针。静态函数取消引用指针,调用等效方法。这有意义吗?还是我弄错了什么?感

c++ - 如何读取寄存器 0x​​104567911 RBX、RCX、RDX、RSP。 C 或 C++ 中的 RBP、RSI、RDI?

这个问题在这里已经有了答案:Howcanyoupullavaluefromaregister?(1个回答)关闭9年前。假设我想从双核x64CPU上的那些寄存器(以及几乎所有这些)中读取值。我怎样才能做到这一点?我可以简单地写这样的东西吗:uint64_trax=0,rbx=0;__asm____volatile__(/*readvaluefromrbxintorbx*/"movq%%rdx,%0;\n"/*readvaluefromraxintorax*/"movq%%rax,%1;\n"/*outputargs*/:"=r"(rbx),"=r"(rax):/*noinput*//*c

c++ - boost::shared_ptr 到 void * 反之亦然

我正在用C语言开发一个应用程序,我需要在其中使用第3方C++库。所以,我基本上是在C++库周围编写一个包装器,以便可以从我的纯C应用程序中调用它。库中的一些方法返回类型为boost::shared_ptr的指针,我需要将其转换为void*[forC]然后将其转换回boost::shared_ptr类型以重用它以进行进一步处理。我使用以下方式进行转换:作废*:void*func1(){//aftertheboost::shared_ptriscreatedreturnstatic_cast(SHARED_PTR.get())}来自void*:voidfunc2(void*VOID_PTR

c++ - 使用 std::sort 对二维数组进行排序(基于列)

我正在运行一个测试,显示按列对二维数组进行排序的好处,方法是将数据提取到一个单独的数组中并对该数组进行排序,然后将其复制回该列。我想运行std::sort作为每次运行的排序算法。我试图弄清楚如何先在适当的位置运行循环,然后再进入二维阵列的复制和复制。输入/输出的一个例子是这样的。#include#includeintmain(){intinput[][5]={{13,27,4,1,11},{11,19,2,37,1},{32,64,11,22,41},{71,13,27,-8,-2},{0,-9,11,99,13}};//std::sortsomethinghere.intoutput

c++ - 我可以从 Mersenne Twister 获得当前种子吗?

我正在我的应用程序中调整MersenneTwister,特别是来自http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html的mt19937ar.c-代码反射(reflect)在https://gist.github.com/mstum/8367363上这在游戏中用作确定性RNG,并且为了使保存游戏按预期工作,我需要从MT中获取当前种子(而不是初始种子),以便我可以继续。例如,假设我用12345的种子初始化它并调用genrand_int315次。这会产生序列1996335345、1911592690、67

c++ - 使用 std::stack 和 std::map 内存使用率意外高

我正在尝试遍历一棵树,以便访问4x4滑动拼图的所有可能状态。我写的算法最初是递归的,但由于(显然)非常深的树,这被证明是不可能的。它崩溃并报告了段错误。然后我决定重写算法以迭代地完成它的工作,据我所知,它工作得很好。然而,一段时间后,由于交换,它开始大幅减速。我做了一些计算,但无法弄清楚所有这些内存使用量来自哪里......代码贴在下面,但这里是重要的功能:std::stack>stackstd::mapdistanceTable假设stack的内存占用与它包含的元素数量成正比,并假设map相同(其中一个元素是pair),我打印出预期的内存占用量:cout))/(1并将输出与top的输